Conversión entre formatos de fecha y hora de MySQL |Diario de base de datos

2022-06-25 08:46:44 By : Ms. CiCi Liu

Todos los sistemas más grandes que he ayudado a desarrollar necesitaban almacenar alguna combinación de campos de fecha y hora.Casi universalmente, estos campos presentaban dificultades de un tipo u otro.Un desafío particularmente memorable fue la conversión entre el almacenamiento interno y los formatos de visualización que presentaban el nombre del mes en lugar de uno numérico.Pudimos superarlo usando una combinación de bases de datos y soluciones de programación, pero hubiera sido mucho más fácil si hubiéramos estado usando MySQL.Su manejo completo y flexible de la fecha le permite cambiar entre formatos de fecha/hora internos y externos con relativa facilidad.Ahora me gustaría mostrarles lo que podríamos haber hecho en MySQL...MySQL admite una variedad de combinaciones de tipos de datos de fecha/hora.Todo lo que tiene que hacer, al crear una columna de fecha/hora, es elegir uno de los siguientes tipos que más se asemeje a la porción de fecha/hora y la precisión que necesita:Una tabla que contiene las columnas DATE y DATETIME se crea de la misma manera que cualquier otra columna de una tabla.Por ejemplo, podemos crear una nueva tabla llamada pedidos que contenga el número de pedido, el artículo del pedido, la fecha del pedido y las columnas de entrega del pedido de la siguiente manera:Si bien es común almacenar fechas usando un guión (-) como delimitador y dos puntos (:) como delimitador de tiempo, de hecho es posible usar cualquier carácter, o incluso ningún carácter, entre los segmentos de fecha y hora. .Por lo tanto, los siguientes formatos representan la misma fecha y hora:MySQL aceptará con gusto cualquiera de las siguientes declaraciones como entradas de fecha:El formato aaaa-mm-dd utilizado por MySQL se denomina formato de fecha internacional (o ISO).Lo bueno de usar ese formato es que evita que se mezclen los días y los meses.Según la configuración regional de la base de datos, se pueden intercambiar meses y días ambiguos, como el 4/3/1999.¡Me he encontrado con este problema muchas veces en Access, que se basó en el formato de fecha corta 'dd/mm/yyyy'!Las aplicaciones que insertan fechas deben convertirlas de un tipo de datos de fecha pura a una cadena compuesta por alguna variación del formato de año, mes y día.El siguiente código de VBScript convertiría una fecha y hora en una cadena YYYY-MD h:m:s como '2006-3-3 15:2:7':Tenga en cuenta que, sin el formato de tiempo en la línea final, la parte de tiempo se omitiría y se perdería para siempre.De forma predeterminada, MySQL también muestra las fechas en formato internacional:Para mostrar fechas y horas en un formato diferente, use la versátil función DATE_FORMAT() de MySQL:Acepta una serie de especificadores en el argumento de formato.Estos son el carácter "%" seguido de caracteres especificadores de formato.Por ejemplo, %e especifica el mes numérico;%h especifica la hora:El estándar de formato de fecha en el que trabajo es 'DD-MMM-YYYY', donde MMM es el nombre del mes abreviado de tres letras.Después de haber trabajado con este formato durante años, ¡no puedo pensar en una forma más diabólica de volver locos a los desarrolladores!Ha habido muchas pruebas y tribulaciones, ¡pero ahora lo hemos dominado!Esto es lo que he aprendido:Idealmente, debe ejercer control sobre las entradas mediante el uso de algún tipo de widget de GUI que limite los nombres de los meses a fechas válidas.Un control desplegable o de calendario funciona muy bien para este propósito.Por el contrario, aceptar entradas de fecha a través de campos de texto de forma libre es un problema.Otras entradas, como las enviadas por un socio a través de datos XML, deben aceptarse en cualquier formato que se le proporcione.Trabajar con fechas que contienen nombres de meses completos puede ser especialmente problemático.En estos casos, la función STR_TO_DATE() de MySQL puede ayudar.Es el inverso de la función DATE_FORMAT().Toma una cadena de valor (str) y una cadena de formato (format).La cadena de formato puede contener caracteres literales y especificadores de formato que comienzan con "%".Los caracteres literales en formato deben coincidir literalmente en str.Los especificadores de formato en format deben coincidir con una parte de fecha u hora en str.STR_TO_DATE() devuelve un valor de fecha/hora si la cadena de formato contiene partes de fecha y hora, o un valor de fecha u hora si la cadena contiene solo partes de fecha u hora.Si el valor de fecha/hora extraído de stris no es válido, STR_TO_DATE() devuelve NULL y genera una advertencia:Mostrar los nombres de los meses es bastante fácil porque la función DATE_FORMAT() tiene especificadores para los nombres de meses completos y abreviados (%M y %b respectivamente).La función MONTHNAME() también puede ser útil allí.Solo tenga cuidado con los nombres de los meses abreviados porque algunas regiones, como el francés ('fr'), usan una abreviatura de cuatro letras.El problema con las abreviaturas de los meses en francés es que tres letras no son suficientes para distinguir entre junio y julio, que en francés son juin y juillet.A partir de MySQL 5.0.25, la configuración regional indicada por la variable del sistema lc_time_names controla el idioma utilizado para mostrar los nombres y abreviaturas de los días y los meses.Esta variable afecta la salida de las funciones DATE_FORMAT(), DAYNAME() y MONTHNAME().Los nombres de configuración regional tienen una porción de idioma y región enumerada por IANA (http://www.iana.org/assignments/language-subtag-registry) como 'ja_JP' o 'pt_BR'.El valor predeterminado es 'en_US'.La siguiente función lee la parte del idioma de la variable del sistema lc_time_names para devolver un nombre de mes de tres letras en la configuración regional actual.Acepta el número del mes como parámetro de entrada, que va del 1 al 12:Las siguientes pruebas destacan la solución para la edición de junio/julio en francés.Juillet se muestra así como jul:El manejo completo y flexible de fechas de MySQL le permite cambiar entre formatos de fecha/hora internos y externos con relativa facilidad.Además, los nombres de mes de tres letras tradicionalmente desafiantes se pueden administrar utilizando la variable de sistema lc_time_names de MySQL y las funciones DATE_FORMAT(), DAYNAME() y MONTHNAME() que tienen en cuenta la configuración regional.Explore los siguientes enlaces para obtener más información sobre algunos de los temas de hoy:Ver todos los artículos de Robert GravelleDatabaseJournal.com publica artículos relevantes, actualizados y pragmáticos sobre el uso de hardware de base de datos y herramientas de administración y sirve como un foro para el conocimiento profesional sobre bases de datos propietarias, de código abierto y basadas en la nube: tecnología fundamental para todos los sistemas de TI.Publicamos artículos interesantes sobre nuevos productos, mejores prácticas y tendencias;los lectores se ayudan unos a otros en varias preguntas y problemas de la base de datos.Los sistemas de administración de bases de datos (DBMS) y los procesos de seguridad de bases de datos también son áreas clave de enfoque en DatabaseJournal.com.Anúnciate con TechnologyAdvice en Database Journal y nuestras otras plataformas centradas en TI.Propiedad de TechnologyAdvice.© 2022 Consejos Tecnológicos.Todos los derechos reservados Divulgación del anunciante: algunos de los productos que aparecen en este sitio son de compañías de las cuales TechnologyAdvice recibe una compensación.Esta compensación puede afectar cómo y dónde aparecen los productos en este sitio, incluido, por ejemplo, el orden en que aparecen.TechnologyAdvice no incluye todas las empresas ni todos los tipos de productos disponibles en el mercado.